package com.iot.north.app.demo.recieve.controller;

import com.fasterxml.jackson.databind.JsonNode;
import com.iot.north.app.demo.recieve.service.EventService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

/**
 * 此部分为接受IoT规则引擎推送消息模块。 此模块主要为开发接收消息相关功能的开发者提供参考。
 *
 * <p>若要运行并成功接受数据，需要在规则引擎中配置相应规则，且服务ip、端口等信息需要和此服务对应。
 */
@Slf4j
@RestController
public class RecieveController {
  @Autowired private EventService eventService;

  @PostMapping("/pushMsg")
  public void get(@RequestBody JsonNode node) {
    // TODO 此处建议先把收到的数据进行存储操作

    // 按照收到的数据按照事件进行处理
    switch (node.get("iot_sys_event").asText()) {
        // 设备登录
      case "devLogin":
        eventService.devLogin(node);
        break;
        // 设备登出
      case "devLogout":
        eventService.devLogout(node);
        break;
        // 设备上报
      case "devSend":
        eventService.devSend(node);
        break;
        // 云端下发
      case "cloudSend":
        eventService.cloudSend(node);
        break;
        // 设备数据变化
      case "dataChanged":
        eventService.dataChanged(node);
        break;
        // 此demo只对上述事件进行处理，更多事件可以在"文档中心"-"消息通信"-"规则引擎"中查看。
      default:
        log.info("unknow event,the message info: " + node);
    }
  }
}
